#ifndef LED_CONTROL_CENTER_H
#define LED_CONTROL_CENTER_H

#include "led_manager.h"
#include <map>

// LED控制中心 - 业务逻辑层
// 负责协调LED状态变化、冲突解决、优先级管理
class LEDControlCenter {
private:
    LEDManager* ledManager;
    
    // 状态管理
    LEDStatus currentRequestedStatus;
    LEDStatus lastConfirmedStatus;
    unsigned long lastStatusChangeTime;
    
    // 会话管理
    bool drawingSessionActive;
    bool temporaryOverrideActive;
    LEDStatus temporaryOverrideStatus;
    unsigned long temporaryOverrideExpiry;
    
    // 故障计数器
    int consecutiveFailures;
    
    // 状态优先级映射
    std::map<LEDStatus, int> statusPriority;
    
    // 内部方法
    void initializePriorities();
    bool canTransitionTo(LEDStatus newStatus);
    void logStatusChange(LEDStatus from, LEDStatus to, const String& reason);

public:
    LEDControlCenter(LEDManager* manager);
    ~LEDControlCenter();
    
    // 初始化
    bool begin();
    
    // 主要接口
    void update();  // 定期调用，处理状态维护
    bool requestStatusChange(LEDStatus status, const String& reason = "");
    LEDStatus getCurrentStatus();
    
    // 会话管理
    void startDrawingSession();
    void endDrawingSession();
    bool isDrawingSessionActive();
    
    // 临时状态覆盖（用于按键反馈等）
    void setTemporaryOverride(LEDStatus status, unsigned long durationMs = 2000);
    void clearTemporaryOverride();
    
    // 维护和重置
    void emergencyReset();
    String getStatusReport();
    
    // 系统状态更新（替代直接调用LEDManager）
    void updateSystemStatus(bool systemPowerEnabled, bool isDrawingActive, bool isDrawingPaused);
    
    // 状态查询
    bool isHealthy();
    unsigned long getLastStatusChangeTime();
    String getStatusHistory();
    
    // ==================== 统一接口方法 ====================
    // 硬件控制接口（统一通过LEDControlCenter调用）
    void enableWS2812(bool enable);
    void enableStatusLed(bool enable);
    bool isWS2812Enabled();
    bool isWS2812Healthy();
    
    // 颜色和效果控制
    void setTemporaryColor(LEDColor color, uint8_t brightness = 200);
    void clearTemporaryColor();
    void setGlobalBrightness(uint8_t brightness);
    uint8_t getGlobalBrightness();
    
    // 绘图效果控制
    void setDrawingEffect(LEDEffectMode mode, LEDColor color);
    void setDrawingBrightness(uint8_t brightness);
    void setDrawingSpeed(uint8_t speed);
    
    // 位置更新（用于极坐标追踪）
    void updatePosition(float theta, float rho);
    
    // 状态查询
    LEDStatus getLEDStatus();
};

#endif // LED_CONTROL_CENTER_H
